//
// Vertex shader for procedural bricks
//
// Authors: Dave Baldwin, Steve Koren, Randi Rost
//          based on a shader by Darwyn Peachey
//
// Copyright (c) 2002-2004 3Dlabs Inc. Ltd. 
//
//

uniform int textureId;
uniform vec3 LightPosition;

const float SpecularContribution = 0.3;
const float DiffuseContribution  = 1.0 - SpecularContribution;

varying float LightIntensity;
varying vec2  MCposition;
varying vec4  vertexColor;

void main(void)
{
	vertexColor = gl_Color;
	vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
	vec3 tnorm      = normalize(gl_NormalMatrix * gl_Normal);
	vec3 lightVec   = normalize(LightPosition - ecPosition);
	vec3 reflectVec = reflect(-lightVec, tnorm);
	vec3 viewVec    = normalize(-ecPosition);
	float diffuse   = max(dot(lightVec, tnorm), 0.0);
	float spec      = 0.0;
	
	if (diffuse > 0.0) {
		spec = max(dot(reflectVec, viewVec), 0.0);
		spec = pow(spec, 16.0);
	}
	

	LightIntensity  = DiffuseContribution * diffuse + SpecularContribution * spec;
	MCposition      = gl_Vertex.xy;
	gl_Position     = ftransform();

	gl_TexCoord[0] = gl_MultiTexCoord0;
}

